#include <stdio.h>
#include <stdlib.h>

typedef int elem_t;

int add_elem(int **p, int *n, elem_t val)
{
	int i;

	i = ++(*n);

	if (i <= 1) {
		*p = malloc(sizeof (elem_t));
	} else {
		*p = realloc(*p, i * sizeof (elem_t));
	}

	(*p)[i - 1] = val;

	return 0;
}

int del_elem(int **p, int *n, elem_t key)
{
	int i, j;
	int cnt = 0;
	elem_t* new_p;

	for (i = 0; i < *n; i++) {
		if ((*p)[i] == key) cnt++;
	}

	if (cnt == 0) {
		return -1; // 未找到目标元素
	}
	
	// 新开一个大小正好的数组，把旧数组的元素拷进去，跳过要删除的元素
	new_p = malloc(((*n) - cnt) * sizeof (elem_t));

	for (i = 0, j = 0; i < (*n); i++) {
		if ((*p)[i] != key) {
			new_p[j++] = (*p)[i];
		}
	}

	free(*p); // 释放旧数组

	*p = new_p; // 换掉原来的数组
	(*n) -= cnt;

	return 0;
}

void travel(const int* p, int n)
{
	int i;

	for (i = 0; i < n; i++) {
		printf("%d ", p[i]);
	}
	printf("\n");
}

int find_elem(const int* p, int n, elem_t key)
{
	int cnt = 0;
	int i;

	for (i = 0; i < n; i++) {
		if (p[i] == key) {
			cnt++;
			printf("%d ", i);
		}
	}

	if (cnt > 0) {
		printf("\n共%d个匹配\n", cnt);
		return 0;
	} else {
		printf("未找到指定元素\n");
		return -1;
	}
}
